(deftemplate animal
    (slot nume)
    (slot nutritie)
    (slot modViata)
    (slot mediu)
    (slot reproducere)
    (slot pradator (allowed-values true false))
    (slot pradaPentru)
    (slot zona)
    )

(assert (animal (nume lama)(nutritie vegetarian)(modViata diurn)(mediu terestru)(reproducere pui)(pradator false)(pradaPentru leu)(zona savana)))
(assert (animal(nume leu)(nutritie carnivor)(modViata diurn)(mediu terestru)(reproducere pui)(pradator true)(pradaPentru nil)(zona savana)))
(assert (animal (nume testoasa)(nutritie carnivor)(modViata diurn)(mediu semiacvatic)(reproducere oua)(pradator false)(pradaPentru nil)(zona mediteraneana)))
(assert (animal (nume magot)(nutritie vegetarian)(modViata diurn)(mediu terestru)(reproducere pui)(pradator false)(pradaPentru nil)(zona mediteraneana)))
(assert (animal (nume urs_polar)(nutritie carnivor)(modViata diurn)(mediu terestru)(reproducere pui)(pradator true)(pradaPentru nil)(zona polara)))
(assert (animal (nume oaie)(nutritie vegetarian)(modViata diurn)(mediu terestru)(reproducere pui)(pradator false)(pradaPentru lup)(zona temperata)))
(assert (animal (nume lup)(nutritie carnivor)(modViata diurn)(mediu terestru)(reproducere pui)(pradator true)(pradaPentru nil)(zona temperata)))
(assert (animal (nume broasca)(nutritie ominivor)(modViata diurn)(mediu semiacvatic)(reproducere oua)(pradator true)(pradaPentru nil)(zona temperata)))
(assert (animal(nume foca)(nutritie carnivor)(modViata diurn)(mediu semiacvatic)(reproducere pui)(pradator true)(pradaPentru urs_polar)(zona polara)))
(assert (animal (nume furnica)(nutritie omnivor)(modViata diurn)(mediu terestru)(reproducere oua)(pradator false)(pradaPentru furnicar)(zona tropicala)))
(assert (animal (nume furnicar)(nutritie insectivor)(modViata diurn)(mediu terestru)(reproducere pui)(pradator true)(zona tropicala)))


(defrule semiacvatic
    (animal (nume ?n)(mediu ?m))
	(test (eq ?m semiacvatic))
	=>
    (printout t "Animalul "?n " traieste in mediul semiacvatic." crlf)
    )

(defrule vegetarianMediteraneana
    (animal (nume ?nume)(nutritie ?n) (zona ?z))
	(test (eq ?n vegetarian) )
    (test (eq ?z mediteraneana) )
     =>
    (printout t  "Animalul "?nume " este vegetarian si traieste in zona mediteraneana." crlf)
    )


(defrule pradaSiPradator
    (animal (nume ?pradator))
    (animal (nume ?prada)(pradaPentru ?p))
	(test (eq ?pradator ?p) )   
    =>
    (printout t "("?pradator","?prada")" crlf)
    )
(defrule zonaPolara
    (animal(nume ?n)(zona ?z))
    (test (not(or(eq ?z savana)(eq ?z tropicala)(eq ?z temperata)(eq ?z mediteraneana))))
    =>
    (printout t "animalul "?n " este din zona polara." crlf)
)


(run)